"""
系统变量服务 - 处理系统变量的替换
"""
from datetime import datetime
from typing import Dict, Any
import re


class SystemVariableService:
    """系统变量服务"""
    
    @staticmethod
    def get_system_variables() -> Dict[str, Any]:
        """获取所有系统变量的当前值"""
        now = datetime.now()
        
        return {
            'current_time': now.strftime('%Y-%m-%d %H:%M:%S'),
            'current_date': now.strftime('%Y-%m-%d'),
            'current_date_slash': now.strftime('%Y/%m/%d'),
            'current_date_dash': now.strftime('%Y-%m-%d'),
            'current_date_compact': now.strftime('%Y%m%d'),
            'current_year_month': now.strftime('%Y%m'),
            'current_month': now.strftime('%m'),
            'current_year': now.strftime('%Y'),
            'current_day': now.strftime('%d'),
            'current_weekday': ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'][now.weekday() + 1 if now.weekday() < 6 else 0],
        }
    
    @staticmethod
    def replace_system_variables(content: str) -> str:
        """
        替换内容中的系统变量
        
        Args:
            content: 包含系统变量的内容
            
        Returns:
            替换后的内容
        """
        if not content:
            return content
        
        try:
            # 获取系统变量值
            system_vars = SystemVariableService.get_system_variables()
            
            # 替换系统变量
            for var_name, var_value in system_vars.items():
                pattern = f"{{{{{var_name}}}}}"
                content = content.replace(pattern, str(var_value))
            
            return content
            
        except Exception as e:
            print(f"替换系统变量失败: {str(e)}")
            return content
    
    @staticmethod
    def extract_system_variables(content: str) -> list:
        """
        提取内容中的系统变量
        
        Args:
            content: 要分析的内容
            
        Returns:
            系统变量名列表
        """
        if not content:
            return []
        
        try:
            # 获取所有系统变量名
            system_var_names = list(SystemVariableService.get_system_variables().keys())
            
            # 查找内容中的系统变量
            found_vars = []
            for var_name in system_var_names:
                pattern = f"{{{{{var_name}}}}}"
                if pattern in content:
                    found_vars.append(var_name)
            
            return found_vars
            
        except Exception as e:
            print(f"提取系统变量失败: {str(e)}")
            return []
    
    @staticmethod
    def get_variable_info(var_name: str) -> Dict[str, Any]:
        """
        获取系统变量的详细信息
        
        Args:
            var_name: 变量名
            
        Returns:
            变量信息字典
        """
        now = datetime.now()
        
        variable_info = {
            'current_time': {
                'name': 'current_time',
                'display_name': '当前时间',
                'description': '当前完整时间（年-月-日 时:分:秒）',
                'field_type': 'datetime',
                'sample_value': now.strftime('%Y-%m-%d %H:%M:%S'),
                'is_system': True,
            },
            'current_date': {
                'name': 'current_date',
                'display_name': '当前日期',
                'description': '当前日期（年-月-日）',
                'field_type': 'date',
                'sample_value': now.strftime('%Y-%m-%d'),
                'is_system': True,
            },
            'current_date_slash': {
                'name': 'current_date_slash',
                'display_name': '当前日期（斜杠格式）',
                'description': '当前日期（年/月/日）',
                'field_type': 'date',
                'sample_value': now.strftime('%Y/%m/%d'),
                'is_system': True,
            },
            'current_date_dash': {
                'name': 'current_date_dash',
                'display_name': '当前日期（横杠格式）',
                'description': '当前日期（年-月-日）',
                'field_type': 'date',
                'sample_value': now.strftime('%Y-%m-%d'),
                'is_system': True,
            },
            'current_date_compact': {
                'name': 'current_date_compact',
                'display_name': '当前日期（紧凑格式）',
                'description': '当前日期（年月日）',
                'field_type': 'date',
                'sample_value': now.strftime('%Y%m%d'),
                'is_system': True,
            },
            'current_year_month': {
                'name': 'current_year_month',
                'display_name': '当前年月',
                'description': '当前年月（年月）',
                'field_type': 'date',
                'sample_value': now.strftime('%Y%m'),
                'is_system': True,
            },
            'current_month': {
                'name': 'current_month',
                'display_name': '当前月份',
                'description': '当前月份（月）',
                'field_type': 'number',
                'sample_value': now.strftime('%m'),
                'is_system': True,
            },
            'current_year': {
                'name': 'current_year',
                'display_name': '当前年份',
                'description': '当前年份（年）',
                'field_type': 'number',
                'sample_value': now.strftime('%Y'),
                'is_system': True,
            },
            'current_day': {
                'name': 'current_day',
                'display_name': '当前日',
                'description': '当前日（日）',
                'field_type': 'number',
                'sample_value': now.strftime('%d'),
                'is_system': True,
            },
            'current_weekday': {
                'name': 'current_weekday',
                'display_name': '当前星期',
                'description': '当前星期几',
                'field_type': 'string',
                'sample_value': ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'][now.weekday() + 1 if now.weekday() < 6 else 0],
                'is_system': True,
            },
        }
        
        return variable_info.get(var_name, {})
    
    @staticmethod
    def get_all_variable_info() -> list:
        """获取所有系统变量的信息"""
        var_names = list(SystemVariableService.get_system_variables().keys())
        return [SystemVariableService.get_variable_info(name) for name in var_names]
